import java.util.Arrays;

public class MyArrayList {
    //顺序表的模拟实现；
    public  static int[] elem;
    public  static int usedSize;
    public static final int DEFAULT_Length=5;
    //进行构造方法的设定；
    public MyArrayList(){
        elem=new int[DEFAULT_Length];
    }
    //1，进行向顺序表中添加元素；
    //注意：默认向顺序表中最后一个位置进行元素的添加；
    public static void add(int date){
        if(isFull()){
            grow();
        }
        elem[usedSize++]=date;
    }
    //2，进行顺序表的扩容操作；
    public static void grow(){
        elem= Arrays.copyOf(elem,2*elem.length);
    }
    //3.进行判定顺序表是否已经满了；
    public static boolean isFull(){
        return usedSize== elem.length;
    }
    //4.进行向顺序表中某个位置进行添加元素；
    public static void add2(int pos,int date){
        //首先进行判断添加元素的位置是否合法；
        checkPos(pos);
        //其次进行判断顺序表是否已经满了；
        if(isFull()){
            grow();
        }
        //最后进行向规定位置进行元素的添加；
        for(int i=usedSize-1;i>=pos;i--){
            elem[i+1]=elem[i];
        }
        elem[pos]=date;
        usedSize++;
    }
    //5.进行判断添加位置的合法性（利用抛出异常的思路进行解决该问题）；
    public static void checkPos(int pos){
        //进行使用异常语法问题进行解决；
        if(pos<0||pos>usedSize){
            throw new PosException("添加元素位置不合法.....");
        }
    }
    //6.进行判断顺序表中是否包含某个元素；
    public static boolean contain(int date){
        for(int i=0;i<usedSize;i++){
            if(elem[i]==date){
                return true;
            }
        }
        return false;
    }
    //7.进行获取某个元素在顺序表中的位置；
    public static int index(int date){
        for(int i=0;i<usedSize;i++){
            if(elem[i]==date){
                return i;
            }
        }
        return -1;
    }
    //8.根据一个元素的下标进行获取这个元素；
    public static int get(int pos){
        //首先进行判断元素位置的合法性；
        checkPos2(pos);
        //接着进行判断顺序表是否为空，若顺序表位空就无法进行获取这个位置的元素；
        if(ifEmpty()){
            throw new EmptyException("顺序为空，无法进行获取元素");
        }
        return elem[pos];
    }
    //9.进行判断下标位置的合法性；
    public static void checkPos2(int pos){
        if(pos<0||pos>=usedSize){
            throw new PosException("位置不合法异常");
        }
    }
    //10.进行判断顺序表是否为空；
    public static boolean ifEmpty(){
        return usedSize==0;
    }
    //11.进行删除顺序表中的某个元素；
    public static void remove(int toRemove){
        //首先进行寻找这个元素的下标；
        int index=index(toRemove);
        if(index==-1){
            System.out.println("没有找到你要删除的元素");
            return;
        }
        //接着进行元素的删除操作；
        for(int i=index;i<usedSize-1;i++){
            elem[i]=elem[i+1];
        }
        usedSize--;
    }
    //12，进行顺序表的打印；
    public static void disPlay(){
        for(int i=0;i<usedSize;i++){
            System.out.print(elem[i]+"  ");
        }
    }
    //13,进行获取当前顺序表的元素个数；
    public static int size(){
        int count=0;
        for(int i=0;i<usedSize;i++){
            count++;
        }
        return count;
    }
//进行测试模拟顺序表的正确性；
    public static void main(String[] args){
        MyArrayList myArrayList=new MyArrayList();
        myArrayList.add(10);
        myArrayList.add(12);
        myArrayList.add(14);
        myArrayList.add(16);
        myArrayList.add(18);
        myArrayList.add(20);
        //myArrayList.disPlay();
        myArrayList.add2(2,666);
        myArrayList.disPlay();
        System.out.println();
        boolean ret=myArrayList.contain(20);
        System.out.println(ret);
        int ret1=myArrayList.index(666);
        System.out.println(ret1);
        int ret2=myArrayList.index(66);
        System.out.println(ret2);
//        int ret3=myArrayList.get(9);
//        System.out.println(ret3);
        int ret4=myArrayList.get(0);
        System.out.println(ret4);
        myArrayList.remove(666);
        myArrayList.disPlay();
        System.out.println();
        int ret5=myArrayList.size();
        System.out.println(ret5);



    }


}
